#include "czytaj.h"
//#include "debug.h"

char* czytajPlikCaly(char *nazwaPliku) {
  char *s;
  int ile = 0;
  int i = 0;
  char z;
  FILE *f = fopen(nazwaPliku, "r");
  
  if (f != NULL) {
    // zliczanie znakow w pliku
    while ( (z=getc(f)) != EOF ) {
      ile++;
    }
    // dlugosc lancucha = ile znakow jest w pliku i znak konczacy
    s = malloc(sizeof(char) * (ile+1));    
	// przewiniecie na poczatek pliku
    fseek(f, 0, SEEK_SET);
	// kopiowanie znakow z pliku do lancucha
    while ( (z=getc(f)) != EOF ) {
      s[i] = z;
      i++;
    }
	// zakonczenie lancucha
    s[i] = '\0'; 
  } else { // jezeli nie otwarto pliku zwraca NULL
    return NULL;
  }
  fclose(f);

  return s;
}

void zamknij(char* s) {
  free(s);
}

char** czytajPlikWierszami(char *nazwaPliku, int *ileLinii) {
  char **wiersze = NULL;
  int ileWierszy = 1;
  int ileZnakowWwierszu;
  int *tabLiczbyZnakow;
  int i = 0;
  int k;
  char z;
  FILE *f = fopen(nazwaPliku, "r");
  
  if (f != NULL) {
    // zliczanie wierszy w pliku
    while ( (z=getc(f)) != EOF ) {
	  if (z=='\n')
        ileWierszy++;
    }
	*ileLinii = ileWierszy;
	wiersze = malloc(sizeof(char*) * (ileWierszy)); 
	
    #ifdef DEBUG
	printf("ile wierszy = %d\n", ileWierszy);
	#endif
	// przewiniecie na poczatek pliku
    fseek(f, 0, SEEK_SET);
	
	// tablica ilosci znakow
	tabLiczbyZnakow = malloc(sizeof(int) * (ileWierszy)); 
	// Zliczanie dlugosci wierszy
	ileZnakowWwierszu = 0;
	i = 0; // indeks wiersza
	while ( (z=getc(f)) != EOF ) {
	  if(z!='\n') {
	    ileZnakowWwierszu++;
	  } else {
	    tabLiczbyZnakow[i] = ileZnakowWwierszu;
		#ifdef DEBUG
		printf("%d wiersz -> %d znakow\n", i, ileZnakowWwierszu);
		#endif
		i++;
		ileZnakowWwierszu = 0;
	  }
	}
	tabLiczbyZnakow[i] = ileZnakowWwierszu;
	#ifdef DEBUG
	printf("%d wiersz -> %d znakow\n", i, ileZnakowWwierszu);
	#endif
    // przewiniecie na poczatek pliku
    fseek(f, 0, SEEK_SET);
	
	i = 0; // indeks wiersza
	wiersze[i] = malloc(sizeof(char) * (tabLiczbyZnakow[i]+1));
	#ifdef DEBUG
    printf("ile miejsc %d\n", tabLiczbyZnakow[i]+1);
	printf("%d\n", tabLiczbyZnakow[i]+1);
	#endif
	k = 0; // indeks elementu w wierszu
	while ( (z=getc(f)) != EOF ) {
	  if(z!='\n') {
	    wiersze[i][k++] = z;
	  } else {
	    wiersze[i][k] = '\0';
		i++;
		k = 0;
		#ifdef DEBUG
		printf("ile miejsc %d\n", tabLiczbyZnakow[i]+1);
		#endif
		wiersze[i] = malloc(sizeof(char) * (tabLiczbyZnakow[i]+1));
	  }
	}
	// zakonczenie ostatniego lancucha (po EOF)
	wiersze[i][k] = '\0';
	#ifdef DEBUG
	for(i=0; i<ileWierszy; i++)
	  printf("%s\n", wiersze[i]);
	#endif  
	free(tabLiczbyZnakow);
  } else { // jezeli nie otwarto pliku zwraca NULL
    return NULL;
  }
  
  fclose(f);

  return wiersze;
}

void zamk(char **w, int iW) {
  int i;
  for(i=0; i<iW; i++)
    free(w[i]);
  free(w);	
}